gdkkeys: Avoid instantiating a display manager if none exists
authorColin Walters <walters@verbum.org>
Sat, 23 Mar 2013 17:51:24 +0000 (13:51 -0400)
committerColin Walters <walters@verbum.org>
Sat, 23 Mar 2013 21:07:15 +0000 (17:07 -0400)
For introspection scanning which ends up calling class_init() which in
turn calls into the keybindings code, we can just use the fallback
keyval conversion code.

https://bugzilla.gnome.org/show_bug.cgi?id=696457

gdk/gdkdisplaymanager.c
gdk/gdkdisplaymanagerprivate.h
gdk/gdkkeys.c

index e29fa511b5121964040a21dc16003e2c9fe356f5..b15aeb0afbb6140ad70dc5649a424eb717ce9bd5 100644 (file)
@@ -267,6 +267,8 @@ gdk_set_allowed_backends (const gchar *backends)
   allowed_backends = g_strdup (backends);
 }
 
+static GdkDisplayManager *manager = NULL;
+
 /**
  * gdk_display_manager_get:
  *
@@ -287,8 +289,6 @@ gdk_set_allowed_backends (const gchar *backends)
 GdkDisplayManager*
 gdk_display_manager_get (void)
 {
-  static GdkDisplayManager *manager = NULL;
-
   if (manager == NULL)
     {
       const gchar *backend_list;
@@ -381,6 +381,15 @@ gdk_display_manager_get (void)
   return manager;
 }
 
+/* Used for cases where we don't actually want to instantiate a
+ * display manager if none exists.  Internal only.
+ */
+GdkDisplayManager *
+_gdk_display_manager_get_nocreate (void)
+{
+  return manager;
+}
+
 /**
  * gdk_display_manager_get_default_display:
  * @manager: a #GdkDisplayManager
index f915f60b6b7c3af6d9485222f777438f2e02039f..fade4d6a7cf28542c8fab40f2454f9ed99190dd2 100644 (file)
@@ -64,6 +64,9 @@ struct _GdkDisplayManagerClass
                                        GdkDisplay        *display);
 };
 
+GdkDisplayManager *
+_gdk_display_manager_get_nocreate (void);
+
 G_END_DECLS
 
 #endif
index 6b46dbf7dfbac4355695bcbb2fb773c4d21ac339..9194d7f5cbf1d21fb6a2ba91fa9245a2dcf68d7b 100644 (file)
@@ -203,9 +203,12 @@ gdk_keyval_convert_case (guint symbol,
                          guint *lower,
                          guint *upper)
 {
-  GdkDisplayManager *manager = gdk_display_manager_get ();
+  GdkDisplayManager *manager = _gdk_display_manager_get_nocreate ();
 
-  GDK_DISPLAY_MANAGER_GET_CLASS (manager)->keyval_convert_case (manager, symbol, lower, upper);
+  if (manager)
+    GDK_DISPLAY_MANAGER_GET_CLASS (manager)->keyval_convert_case (manager, symbol, lower, upper);
+  else
+    _gdk_display_manager_real_keyval_convert_case (NULL, symbol, lower, upper);
 }
 
 /**